Skip to main content

Basic Tween

  • basic properties
GSAPCSSdescription
x: 100transform: translateX(100px)X축으로 100px만큼 이동
y: 100transform: translateY(100px)Y축으로 100px만큼 이동
rotation: 360transform: rotate(360deg)360도 회전
rotationX: 360transform: rotateX(360deg)X축으로 360도 회전
rotationY: 360transform: rotateY(360deg)Y축으로 360도 회전
skewX: 45transform: skewX(45deg)X축으로 45도 기울임
skewY: 45transform: skewY(45deg)Y축으로 45도 기울임
scale:2transform: scale(2, 2)크기 2배 증가
scaleX: 2transform: scaleX(2)X축으로 크기 2배 증가
scaleY: 2transform: scaleY(2)Y축으로 크기 2배 증가
xPercent: 50transform: translateX(50%)현재 위치에서 X축으로 50% 만큼 이동
yPercent: 50transform: translateY(50%)현재 위치에서 Y축으로 50% 만큼 이동
duration: 3transition: all 3s3초 동안 실행, default: 0.5초
opacity: 0opacity: 0투명도 100%
width: 100width: 100px가로 길이를 100px만큼 설정
height: 100height: 100px세로 길이를 100px만큼 설정
backgroundColor: 'red'backgroundColor: 'red'background color를 'red'로 변경
color: 'red'color: 'red'font color를 'red' 로 변경
padding: 100padding: 100px안쪽 여백을 100px만큼 설정
padding: '10 20 30 40'padding: 10px 20px 30px 40px안쪽 여백을 상: 10px, 우: 20px, 하: 30px, 좌: 40px만큼 설정
paddingTop: 10padding-top: 10px안쪽 상측 여백을 10px만큼 설정
paddingBottom: 10padding-bottom: 10px안쪽 하측 여백을 10px만큼 설정
paddingLeft: 10padding-left: 10px안쪽 좌측 여백을 10px만큼 설정
paddingRight: 10padding-right: 10px안쪽 우측 여백을 10px만큼 설정
margin: 10margin: 10px바깥쪽 여백을 10px만큼 설정
margin: '10 20 30 40'margin: 10px 20px 30px 40px바깥쪽 여백을 상: 10px, 우: 20px, 하: 30px, 좌: 40px만큼 설정
marginTop: 10margin-top: 10px바깥쪽 상측 여백을 10px만큼 설정
marginBottom: 10margin-bottom: 10px바깥쪽 하측 여백을 10px만큼 설정
marginLeft: 10margin-left: 10px바깥쪽 좌측 여백을 10px만큼 설정
marginRight: 10margin-right: 10px바깥쪽 우측 여백을 10px만큼 설정

GSAP은 사용자가 설정한 모든 숫자 속성에 대해 애니메이션을 적용할 수 있다.

  • 100 (100px)
  • 100px
  • 100em
  • 100rem
  • 100vh and vw
  • 100%
브라우저 성능을 고려한다면

브라우저 성능을 최대치로 끌어올리기 위해선 CSS Transform과 Opacity만을 사용하여 애니메이션을 구현하는걸 권장한다. CSS Transform과 Opacity는 애니메이션을 위해 최적화되어 있는 코드이고 GPU를 사용하는 장점이 있다. left, margin, padding, width/height 조절 등을 사용하게 되면 브라우저가 페이지 레이아웃을 다시 리렌더링(re-render)하기 때문에 브라우저 성능이 저하될 수 있다.


  • special properties
GSAPCSSdescription
repeat: 3직접적인 CSS 속성 사용 불가animation-iteration-count: 4애니메이션을 3번 반복
repeat: -1animation-iteration-count: infinite애니메이션 무한 반복
delay: 3animation-delay: 2s최초 애니메이션이 실행 대기 시간 3초
crepeatDelay: 2CSS 속성 사용 불가애니메이션 반복 대기 시간 2초
rotationX: 360transform: rotateX(360deg)X축으로 360도 회전
yoyo: trueanimation-direction: alternate현재 위치에서 지정한 위치까지 이동 후 다시 현재 위치로 되돌아오는 애니메이션 반복

gsap.to​

원래 위치에서 지정한 값(위치)으로 이동하는 애니메이션이다.

  • 기본 구문
gsap.to('class, tag', { properties });

// ex) class
gsap.to('.box', { properties });

// ex) tag
gsap.to('h1', { properties });

from()​

지정한 값(위치)에서 부터 원래의 위치로 되돌아오는 애니메이션이다.

  • 기본 구문
gsap.from('.orange', { x: 400, y: 500 });

fromTo()​

지정한 값(2번째 파라미터)에서 지정한 값으로(3번째 파라미터)로 이동하는 애니메이션이다.

  • 기본 구문
gsap.fromTo('orange', { x: 400, y: 500 }, { x: 200, y: 200 });

코드에서 사용된 2개의 객체는 from vars와 to vars로 작동된다.

ease​

애니메이션에 가속도를 주는 property이며 기본 값은 ease: 'power1.out' 이며 모든 property는 out이 기본 값이다.
GSAP에서는 애니메이션을 위해 사용하기도 하지만 레이아웃, 오브젝트간의 간격을 주기 위해 사용된다.

GSAPdescription
iease: 'method.inOut'in -> Out -> in 순서대로 동작
ease: 'none' or linear'등속도 운동
ease: 'power1'부드럽게 시작해서 부드럽게 끝나는 기본적인 가속도 운동
ease: 'power1.in'훨씬 빠르게 가속
ease: 'power2'빠르게 가속한 후 부드럽게 감속하는 효과
ease: 'power2.in'훨씬 빠르게 가속
ease: 'power3'power2보다 빠르게 가속한 후 부드럽게 감속하는 효과
ease: 'power3.in'훨씬 빠르게 가속
ease: 'power4'power3보다 빠르게 가속한 후 부드럽게 감속하는 효과
ease: 'power4.in'훨씬 빠르게 가속
ease: 'back'지정한 위치보다 더 멀리 이동 후 다시 지정한 위치로 복귀하는 효과
ease: 'back.in'원래 위치에서 뒤로 살짝 갔다가 빠르게 가속
ease: 'bounce'지정한 위치로 여러 번 튕긴 후 도달하는 효과
ease: 'bounce.in'시작 지점에서 여러 번 튕긴 후 지정한 위치로 이동
ease: 'circ'원형 곡선을 따라 이동하는 효과
ease: 'circ.in'원형 곡선을 따라 가속
ease: 'elastic'고무줄처럼 탄성을 주며 튕기는 효과
ease: 'elastic.in'고무줄처럼 탄성을 가하는 준비 운동 후 지정한 위치로 가속
ease: 'expo'아주 빠르게 움직인 후 느리게 멈춤
ease: 'expo.in'아주 느리게 시작한 후 빠르게 멈춤
ease: 'sine'sin 기반의 자연스러운 감속
ease: 'sine.in'자연스러운 가속
ease: 'steps(n)'애니메이션을 n단계로 나누어 진행 (스프라이트 애니메이션)

stagger​

단일 Tween에서 여러 대상의 시작 시간을 오프셋 설정하여 다중 요소를 제어 가능하다.

<body>
<div class="stage">
<div class="orange"></div>
<div class="pink"></div>
<div class="green"></div>
<div class="red"></div>
<div class="blue"></div>
</div>
</body>

<script>
gsap.to('.orange', { x: 100 });
gsap.to('.pink', { x: 100, delay: 0.3 });
gsap.to('.green', { x: 100, delay: 0.6 });
gsap.to('.red', { x: 100, delay: 0.9 });
gsap.to('.blue', { x: 100, delay: 1.2 });
</script>
  • 이 경우 객체가 더 많을 경우 delay을 일일이 전부 다 수정해주어야 한다.
  • 이러한 기능은 CSS 속성에서 지원하지 않는다.

  • 기본 구문
<body>
<div class="stage">
<div class="orange box"></div>
<div class="pink box"></div>
<div class="green box"></div>
<div class="red box"></div>
<div class="blue box"></div>
</div>
</body>

<script>
gsap.to('.box', { x: 100, stagger: 0.3 });
</script>
  • 각 box class를 가진 오브젝트들이 순차적으로 delay를 0.3초씩 가지며 실행된다.

  • properties

GSAPdescription
stagger: 0.30.3초의 delay를 가지며 다중 요소가 순차적으로 실행
stagger: { each: 0.3 }기본 값, 각 요소의 시작 사이에 0.3초의 대기 시간 적용 (stagger: 0.3과 동일)
stagger: { amount: 1.0 }다중 요소가 1초를 각각 나누어 1초만에 모든 애니메이션이 순차적으로 실행
stagger: {from: 'value'}number: 해당 index의 오브젝트부터 실행,
'center': 요소의 가운데 index부터 실행
end': 요소의 마지막 index부터 실행
'edges': 요소의 양쪽 끝 index부터 실행

twin Control​

tween 애니메이션을 제어할 수 있는 method이다.

  • 기본 구문 (HTML)
// 기본 구문
let tween = gsap.to('target', { x: 500 });

// property로 기본 재생을 중지 상태로 만들 수도 있다.
let tween = gsap.to('target', { x: 500, paused: true });

// DOM
document.querySelector('target').addEventListener('click', () => {
tween.methods();
});
  • 기본 구문 (React)
xport default function App() {
const container = useRef();

// twin을 Control할 오브젝트 Ref
const boxRef = useRef();

// twin method 제어 Ref
const tweenRef = useRef();

useGSAP(
() => {
tweenRef.current = gsap.to(boxRef.current, {
x: 500,
// paused: true // 기본 재생 중지 방법 1
});
tweenRef.current.pause(); // 기본 재생 중지 방법 2
},
{ scope: container }
);

const onControlBox = (control) => {
control === 'play' && tweenRef.current.play();
control === 'pause' && tweenRef.current.pause();
control === 'resume' && tweenRef.current.resume();
control === 'reverse' && tweenRef.current.reverse();
control === 'restart' && tweenRef.current.restart();
};

return (
<div ref={container}>
<div ref={boxRef} className='orange'></div>

<button onClick={() => { onControlBox('play'); }} >
play
</button>
<button onClick={() => { onControlBox('pause'); }} >
pause
</button>
<button onClick={() => { onControlBox('resume'); }} >
resume
</button>
<button onClick={() => { onControlBox('reverse'); }} >
reverse
</button>
<button onClick={() => { onControlBox('restart'); }} >
restart
</button>
</div>
);
}
  • methods
GSAPdescription
twin.play()애니메이션 재생
twin.pause()애니메이션 중지
twin.resume()애니메이션 재개
twin.reverse()애니메이션 역재생
twin.restart()애니메이션 재실행